ShinyGeoEdu Website Launches to Develop Teaching-Learning Materials for Geography Education

홈페이지 개설
서버
AWS
Shiny
Author

Sechang KIM

Published

January 1, 2025

지리교육을 위한 교수학습자료 제작 및 공유 플랫폼(https://shinygeoedu.com)이 개설되었습니다. 학생의 참여를 촉진할 수 있는 인터랙티브 콘텐츠와 웹 애플리케이션을 중점적으로 개발하고자 합니다. 본 작업은 서울대학교 지리교육과 Spatial Data Science 연구실과 함께합니다.


서울대학교 사범대학 지리교육과의 공간데이터사이언스(Spatial Data Science) 연구실에서 지리교육을 위한 교수학습자료를 개발하고 공유하고자 합니다. 이에 데모 버전 웹사이트를 먼저 제작하게 되었습니다. 본 소식에서는 웹사이트 개설 방법을 안내해드리고자 합니다.

우선 저희가 중점적으로 다루고자 하는 것은 첫째, “인터랙티브 콘텐츠(Interactive Contets)”입니다. 인터랙티브 콘텐츠란 사용자와 상호작용이 가능한 콘텐츠로, 가령 그래프 위에 마우스를 올리는(hover) 행위를 하면 숨겨져 있던 정보가 나타나는(pop-up) 기능을 탑재하고 있습니다. 이러한 콘텐츠는 주로 javascript(또는 R, Python 등 다른 언어에서 javascript 함수를 사용할 수 있게 하는 Wrapper Package)를 통해 제작하게 됩니다. 예컨대 저희는 R의 leaflet, plotly, echarts4r 등의 패키지와 마크다운(markdown) 언어를 결합하여 콘텐츠를 개발하고 있습니다. 기본적으로 이러한 콘텐츠는 사전에 저장된 데이터를 단순히 보여주는 정적 웹 페이지(static web page)이므로, Github Pages이나 Netlify 등의 플랫폼만으로도 비교적 간단히 배포가 가능합니다.

그러나 저희가 두 번째로 중점적으로 다루고자 하는 “웹 애플리케이션(Web Application)”의 경우 이야기가 조금 다릅니다. 웹 애플리케이션의 경우 사용자의 요청(request)을 받아들이고, 웹 서버가 이를 처리하고 가공하여 웹 페이지에 내보내는 동적 웹 페이지(dynamic web page)이기 때문입니다. 즉, 사용자의 처리를 해석하고 처리해줄 ’웹 서버’가 반드시 필요합니다. Github Pages나 Netlify는 이러한 기능을 제공하지 않고 있습니다. 저희는 주로 Posit 사의 Shiny를 이용하여 웹 애플리케이션을 개발하고 있는데, 이용자가 소수인 경우 보통 shinyapps.io를 통해 배포하는 경우가 많습니다. 배포가 정말 쉽고 간단하기 때문입니다. 그러나 사용자가 일정 수 이상이거나, 동시 접속자가 많을 경우 이 방법은 그리 권장되지 않습니다. 무료 플랜의 경우 성능이 매우 저하되고, 유료 버전으로 가면 성능 대비 금액이 높은 편이기 때문입니다. 저희는 궁극적으로 학교 현장에서 사용될 웹 애플리케이션을 염두에 두고 있고, 이는 곧 여러 학생이 동시에 애플리케이션에 접속함을 의미하기 때문에 shinyapps.io를 이용하지 않기로 했습니다.

따라서 저희는 다소 복잡하더라도 서버를 이용해야 하며, 또한 여러 이용자가 동시에 접속할 때에도 성능이 유지될 수 있는 방법을 찾아야 했습니다. 혹은 적어도 서버의 성능을 조절할 수 있어야 했습니다. 그 결과 두 가지 정도의 방법을 생각해보았습니다.

먼저 연구실 내에 분석용 PC가 있어, 이를 서버로 활용하는 방식을 고려했습니다. 서버용 PC는 아니지만, 일반적인 컴퓨터에도 Apache 등의 서버용 프로그램을 설치하면 서버로 쓸 수 있다고 합니다. 이러면 무엇보다도 금액을 많이 아낄 수 있습니다. 별도로 서버 컴퓨터를 구입할 필요도 없고, 서버 대여비도 들지 않습니다. 그리고 이제 구매한지 제법 오래되기는 했지만, 분석용 컴퓨터는 RAM도 32GB 정도는 되는 것으로 알고 있고, CPU도 i7이라 성능도 괜찮습니다. 다만 분석용 컴퓨터에 이미 여러 프로그램(QGIS, ArcGIS, SPSS, SAS 등)이 깔려있고 활용되고 있다는 점, 컴퓨터 종료가 권장되지 않는다는 점, Windows보다 Linux가 더 선호되나 해당 PC는 (당연히) Windows를 쓴다는 점 등이 단점이었습니다. 그러나 무엇보다도, 이런 로컬 서버는 초기 세팅과 유지 보수가 어렵다는 점이 가장 큰 문제였습니다. 저희 전공 특성 상, 연구실 인력으로 서버 및 보안 유지 관리는 현실적으로 어렵다는 판단이 섰습니다.

두 번째, 클라우드 서버 대여는 이러한 문제를 어느 정도 해결할 수 있는 방안이었습니다. 클라우드 서버는 한 마디로 외부의 서버를 빌려서 사용하는 것입니다. 즉, 어떤 기업(e.g. Amazon)이 보유한 서버 컴퓨터 중 일부를 빌려서, 그곳에서 사용자의 요청을 처리해주는 것이죠. 이러한 방식을 사용하면 많은 문제점이 해결됩니다. 서버용 PC를 사용할 수 있고, Linux도 사용할 수 있습니다. 그리고 초기 세팅(DNS 설정, 보안 SSL 적용 등)도 비교적 쉽다고 합니다. 가장 좋은 점은, 이게 가장 범용적인 방식이라 문제가 생겼을 때 해결책을 찾기 쉽다는 것이었습니다. 역시 생태계가 클수록 동일한 어려움을 겪는 사람도 많고, 해결 방법도 많은 것 같습니다.

결론적으로, 저희는 클라우드 서버, 그 중에서도 Amazon Web Server (AWS)를 활용하기로 했습니다. 사실 구글 클라우드 플랫폼(GCP), 마이크로소프트 애저(Azure) 등도 있지만, 하나하나 따지기보다 가장 시장 점유율이 높은 제품을 선택하기로 했습니다. 각자 약간의 장단점이 있을 뿐 어떤 하나의 제품이 월등히 나은 것 같지는 않았기 때문입니다. 다음 포스팅에서는 AWS을 이용해서 홈페이지를 제작하고, 여기에 웹 애플리케이션을 탑재하는 방법을 조금 더 이야기 해보려고 합니다.

Written by 김세창 (Sechang KIM, vs5345@snu.ac.kr)